home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / chunky.s < prev    next >
Text File  |  1997-01-31  |  18KB  |  643 lines

  1. CHUNKYTOPLANAR:
  2.  
  3.  tst.b d5
  4.  beq.s .noteleffect
  5.  
  6.  move.w #8,TELVAL
  7.  
  8. .noteleffect
  9.  
  10.  tst.w TELVAL
  11.  beq NEWCHUNKY
  12.  
  13.  sub.w #1,TELVAL
  14.  move.w TELVAL,d5
  15.  
  16.  bra NEWCHUNKYTEL
  17.  
  18. USEDOUG: dc.w 0
  19.  
  20. MODUL: dc.w 0
  21. HTC: dc.w 0
  22. WTC: dc.w 0
  23. SCRMOD: dc.w 0
  24. TELVAL: dc.w 0
  25.  
  26. SCREENPTRFLIG: dc.l 0
  27.  
  28. NEWCHUNKY
  29.         ;a0 = byte pixels , a1 = plane 1
  30.         ;256 colour / 8 bitplane
  31.  
  32.         tst.b d4
  33.         bne DOUBWIDTHCHUNK
  34.  
  35.         move.w d2,MODUL
  36.         move.w d0,WTC
  37.  
  38.         move.w d1,HTC
  39.         move.w d3,SCRMOD
  40.         
  41.         Movem.l    d2-d7/a2-a6,-(a7)
  42.         Movem.l    .Const(pc),d5-d7
  43.         
  44.         move.l a1,a2
  45.         adda.w WTC,a2
  46.         addq #1,a2        ; end of line to convert
  47.         
  48.         Lea    40*256(a1),a3            Plane2 
  49.         Lea    2*40*256(a1),a4            Plane3
  50.         Lea    2*40*256(a4),a5            Plane5
  51.         Lea    2*40*256(a5),a6            Plane7
  52.     Bra.s    .BPPLoop
  53. .Const        Dc.l    $0f0f0f0f,$55555555,$3333cccc
  54.         Cnop    0,4
  55.  
  56.  
  57. .BPPLoop    Move.l    (a0)+,d0    ; 12 get next 4 chunky pixels in d0
  58.         Move.l    d0,d2        ;  4
  59.         And.l    d5,d2        ;  8 d5=$0f0f0f0f
  60.         Eor.l    d2,d0        ;  8
  61.         Move.l    (a0)+,d1    ; 12 get next 4 chunky pixels in d1
  62. ; d0 = a7a6a5a4a3a2a1a0 b7b6b5b4b3b2b1b0 c7c6c5c4c3c2c1c0 d7d6d5d4d3d2d1d0
  63. ; d1 = e7e6e5e4e3e2e1e0 f7f6f5f4f3f2f1f0 g7g6g5g4g3g2g1g0 h7h6h5h4h3h2h1h0
  64.  
  65.         Move.l    d1,d3        ;  4
  66.         And.l    d5,d3        ;  8 d5=$0f0f0f0f
  67.         Eor.l    d3,d1        ;  8
  68. ; d0 = a7a6a5a4........ b7b6b5b4........ c7c6c5c4........ d7d6d5d4........
  69. ; d1 = e7e6e5e4........ f7f6f5f4........ g7g6g5g4........ h7h6h5h4........
  70. ; d2 = ........a3a2a1a0 ........b3b2b1b0 ........c3c2c1c0 ........d3d2d1d0
  71. ; d3 = ........e3e2e1e0 ........f3f2f1f0 ........g3g2g1g0 ........h3h2h1h0
  72.  
  73.         Lsl.l    #4,d2        ; 16
  74.         Lsr.l    #4,d1        ; 16
  75.         Or.l    d3,d2        ;  8
  76.         Or.l    d1,d0        ;  8
  77. ; d0 = a7a6a5a4e7e6e5e4 b7b6b5b4f7f6f5f4 c7c6c5c4g7g6g5g4 d7d6d5d4h7h6h5h4
  78. ; d2 = a3a2a1a0e3e2e1e0 b3b2b1b0f3f2f1f0 c3c2c1c0g3g2g1g0 d3d2d1d0h3h2h1h0
  79.  
  80.         Move.l    d0,d1        ;  4
  81.         Move.l    d2,d3        ;  4
  82.         And.l    d7,d1        ;  8    ;128
  83.         And.l    d7,d3        ;  8
  84.         Eor.l    d1,d0        ;  8
  85.         Eor.l    d3,d2        ;  8
  86.         Lsr.w    #2,d1        ; 10    
  87.         Lsr.w    #2,d3        ; 10
  88.         Swap    d1        ;  4
  89.         Swap    d3        ;  4
  90.         Lsl.w    #2,d1        ; 10
  91.         Lsl.w    #2,d3        ; 10
  92. ; d0 = a7a6....e7e6.... b7b6....f7f6.... ....c5c4....g5g4 ....d5d4....h5h4
  93. ; d1 = ....c7c6....g7g6 ....d7d6....h7h6 a5a4....e5e4.... b5b4....f5f4.... 
  94.  
  95.         Or.l    d1,d0        ;  8
  96.         Or.l    d3,d2        ;  8
  97. ; d0 = a7a6c7c6e7e6g7g6 b7b6d7d6f7f6h7h6 a5a4c5c4e5e4g5g4 b5b4d5d4f5f4h5h4 , d2=32/10
  98.  
  99.         Move.l    d0,d1        ;  4
  100.         Lsr.l    #7,d1        ; 22
  101. ; d0 = a7a6c7c6e7e6g7g6 b7b6d7d6f7f6h7h6 a5a4c5c4e5e4g5g4 b5b4d5d4f5f4h5h4 
  102. ; d1 = ..............a7 a6c7c6e7e6g7g6b7 b6d7d6f7f6h7h6a5 a4c5c4e5e4g5g4b5
  103.  
  104.         Move.l    d0,d3        ;  4
  105.         Move.l    d1,d4        ;  4
  106.         And.l    d6,d0        ;  8    ;258
  107.         And.l    d6,d1        ;  8
  108.         Eor.l    d0,d3        ;  8
  109.         Eor.l    d1,d4        ;  8
  110. ; d0 = ..a6..c6..e6..g6 ..b6..d6..f6..h6 ..a4..c4..e4..g4 ..b4..d4..f4..h4 
  111. ; d3 = a7..c7..e7..g7.. b7..d7..f7..h7.. a5..c5..e5..g5.. b5..d5..f5..h5.. 
  112. ; d1 = ..............a7 ..c7..e7..g7..b7 ..d7..f7..h7..a5 ..c5..e5..g5..b5
  113. ; d4 = ................ a6..c6..e6..g6.. b6..d6..f6..h6.. a4..c4..e4..g4..
  114.  
  115.         Or.l    d4,d0        ;  8
  116.         Or.l    d3,d1        ;  8
  117.         Lsr.l    #1,d1        ; 10
  118. ; d0 = ..a6..c6..e6..g6 a6b6c6d6e6f6g6h6 b6a4d6c4f6e4h6g4 a4b4c4d4e4f4g4h4
  119. ; d1 = ..a7..c7..e7..g7 a7b7c7d7e7f7g7h7 b7a5d7c5f7e5h7g5 a5b5c5d5e5f5g5h5
  120.  
  121.         move.b    d1,40*256(a5)    ; 12 plane 6
  122.         swap    d1        ;  4
  123.         move.b    d1,40*256(a6)    ; 12 plane 8
  124.         move.b    d0,(a5)+    ;  8 plane 5
  125.         swap    d0        ;  4
  126.         move.b    d0,(a6)+    ;  8 plane 7
  127.  
  128.         Move.l    d2,d1        ;  4
  129.         Lsr.l    #7,d1        ; 22
  130. ; d2 = a3a2c3c2e3e2g3g2 b3b2d3d2f3f2h3h2 a1a0c1c0e1e0g1g0 b1b0d1d0f1f0h1h0 
  131. ; d1 = ..............a3 a2c3c2e3e2g3g2b3 b2d3d2f3f2h3h2a1 a0c1c0e1e0g1g0b1
  132.  
  133.         Move.l    d2,d3        ;  4
  134.         Move.l    d1,d4        ;  4
  135.         And.l    d6,d2        ;  8
  136.         And.l    d6,d1        ;  8
  137.         Eor.l    d2,d3        ;  8
  138.         Eor.l    d1,d4        ;  8
  139. ; d2 = ..a2..c2..e2..g2 ..b2..d2..f2..h2 ..a0..c0..e0..g0 ..b0..d0..f0..h0 
  140. ; d3 = a3..c3..e3..g3.. b3..d3..f3..h3.. a1..c1..e1..g1.. b1..d1..f1..h1.. 
  141. ; d1 = ..............a3 ..c3..e3..g3..b3 ..d3..f3..h3..a1 ..c1..e1..g1..b1
  142. ; d4 = ................ a2..c2..e2..g2.. b2..d2..f2..h2.. a0..c0..e0..g0..        
  143.  
  144.         Or.l    d4,d2        ;  8
  145.         Or.l    d3,d1        ;  8
  146.         Lsr.l    #1,d1        ; 10    ;448
  147. ; d2 = ..a2..c2..e2..g2 a2b2c2d2e2f2g2h2 b2a0d2c0f2e0h2g0 a0b0c0d0e0f0g0h0
  148. ; d1 = ..a3..c3..e3..g3 a3b3c3d3e3f3g3h3 b3a1d3c1f3e1h3g1 a1b1c1d1e1f1g1h1
  149.         move.b    d1,(a3)+    ; 12 plane 2
  150.         swap    d1        ;  4
  151.         move.b    d1,40*256(a4)    ;  8 plane 4
  152.         move.b    d2,(a1)+    ;  8 plane 1
  153.         swap    d2        ;  4
  154.         move.b    d2,(a4)+    ;  8 plane 3 ;126 bytws
  155.         cmpa.l    a1,a2        ;  6    
  156.     bne    .BPPLoop        ; 10
  157.     
  158.     move.w SCRMOD,d0
  159.     add.w d0,a1
  160.     add.w d0,a3
  161.     add.w d0,a4
  162.     add.w d0,a5
  163.     add.w d0,a6
  164.     move.w WTC,d0
  165.     lea 1(a1,d0.w),a2
  166.     add.w MODUL,a0    
  167.     subq.w #1,HTC
  168.     bge .BPPLoop
  169.     
  170.         movem.l    (a7)+,d2-d7/a2-a6
  171.         rts
  172.  
  173. DOUBWIDTHCHUNK:
  174.         move.w d2,MODUL
  175.         move.w d0,WTC
  176.  
  177.         move.w d1,HTC
  178.         move.w d3,SCRMOD
  179.         
  180.         Movem.l    d2-d7/a2-a6,-(a7)
  181.         Movem.l    .Const(pc),d5-d7
  182.         
  183.         move.l a1,a2
  184.         adda.w WTC,a2
  185.         addq #1,a2        ; end of line to convert
  186.         
  187.         Lea    40*256(a1),a3            Plane2 
  188.         Lea    2*40*256(a1),a4            Plane3
  189.         Lea    2*40*256(a4),a5            Plane5
  190.         Lea    2*40*256(a5),a6            Plane7
  191.     Bra.s    .BPPLoop
  192. .Const        Dc.l    $0f0f0f0f,$55555555,$3333cccc
  193.         Cnop    0,4
  194.  
  195.  
  196. .BPPLoop    Move.l    (a0)+,d0    ; 12 get next 4 chunky pixels in d0
  197.  
  198.         and.l #$ff00ff00,d0
  199.         move.l d0,d2
  200.         lsr.l #8,d2
  201.         or.l d2,d0
  202.  
  203.         Move.l    d0,d2        ;  4
  204.         And.l    d5,d2        ;  8 d5=$0f0f0f0f
  205.         Eor.l    d2,d0        ;  8
  206.         Move.l    (a0)+,d1    ; 12 get next 4 chunky pixels in d1
  207.         and.l #$ff00ff00,d1
  208.         move.l d1,d3
  209.         lsr.l #8,d3
  210.         or.l d3,d1
  211. ; d0 = a7a6a5a4a3a2a1a0 b7b6b5b4b3b2b1b0 c7c6c5c4c3c2c1c0 d7d6d5d4d3d2d1d0
  212. ; d1 = e7e6e5e4e3e2e1e0 f7f6f5f4f3f2f1f0 g7g6g5g4g3g2g1g0 h7h6h5h4h3h2h1h0
  213.  
  214.         Move.l    d1,d3        ;  4
  215.         And.l    d5,d3        ;  8 d5=$0f0f0f0f
  216.         Eor.l    d3,d1        ;  8
  217. ; d0 = a7a6a5a4........ b7b6b5b4........ c7c6c5c4........ d7d6d5d4........
  218. ; d1 = e7e6e5e4........ f7f6f5f4........ g7g6g5g4........ h7h6h5h4........
  219. ; d2 = ........a3a2a1a0 ........b3b2b1b0 ........c3c2c1c0 ........d3d2d1d0
  220. ; d3 = ........e3e2e1e0 ........f3f2f1f0 ........g3g2g1g0 ........h3h2h1h0
  221.  
  222.         Lsl.l    #4,d2        ; 16
  223.         Lsr.l    #4,d1        ; 16
  224.         Or.l    d3,d2        ;  8
  225.         Or.l    d1,d0        ;  8
  226. ; d0 = a7a6a5a4e7e6e5e4 b7b6b5b4f7f6f5f4 c7c6c5c4g7g6g5g4 d7d6d5d4h7h6h5h4
  227. ; d2 = a3a2a1a0e3e2e1e0 b3b2b1b0f3f2f1f0 c3c2c1c0g3g2g1g0 d3d2d1d0h3h2h1h0
  228.  
  229.         Move.l    d0,d1        ;  4
  230.         Move.l    d2,d3        ;  4
  231.         And.l    d7,d1        ;  8    ;128
  232.         And.l    d7,d3        ;  8
  233.         Eor.l    d1,d0        ;  8
  234.         Eor.l    d3,d2        ;  8
  235.         Lsr.w    #2,d1        ; 10    
  236.         Lsr.w    #2,d3        ; 10
  237.         Swap    d1        ;  4
  238.         Swap    d3        ;  4
  239.         Lsl.w    #2,d1        ; 10
  240.         Lsl.w    #2,d3        ; 10
  241. ; d0 = a7a6....e7e6.... b7b6....f7f6.... ....c5c4....g5g4 ....d5d4....h5h4
  242. ; d1 = ....c7c6....g7g6 ....d7d6....h7h6 a5a4....e5e4.... b5b4....f5f4.... 
  243.  
  244.         Or.l    d1,d0        ;  8
  245.         Or.l    d3,d2        ;  8
  246. ; d0 = a7a6c7c6e7e6g7g6 b7b6d7d6f7f6h7h6 a5a4c5c4e5e4g5g4 b5b4d5d4f5f4h5h4 , d2=32/10
  247.  
  248.         Move.l    d0,d1        ;  4
  249.         Lsr.l    #7,d1        ; 22
  250. ; d0 = a7a6c7c6e7e6g7g6 b7b6d7d6f7f6h7h6 a5a4c5c4e5e4g5g4 b5b4d5d4f5f4h5h4 
  251. ; d1 = ..............a7 a6c7c6e7e6g7g6b7 b6d7d6f7f6h7h6a5 a4c5c4e5e4g5g4b5
  252.  
  253.         Move.l    d0,d3        ;  4
  254.         Move.l    d1,d4        ;  4
  255.         And.l    d6,d0        ;  8    ;258
  256.         And.l    d6,d1        ;  8
  257.         Eor.l    d0,d3        ;  8
  258.         Eor.l    d1,d4        ;  8
  259. ; d0 = ..a6..c6..e6..g6 ..b6..d6..f6..h6 ..a4..c4..e4..g4 ..b4..d4..f4..h4 
  260. ; d3 = a7..c7..e7..g7.. b7..d7..f7..h7.. a5..c5..e5..g5.. b5..d5..f5..h5.. 
  261. ; d1 = ..............a7 ..c7..e7..g7..b7 ..d7..f7..h7..a5 ..c5..e5..g5..b5
  262. ; d4 = ................ a6..c6..e6..g6.. b6..d6..f6..h6.. a4..c4..e4..g4..
  263.  
  264.         Or.l    d4,d0        ;  8
  265.         Or.l    d3,d1        ;  8
  266.         Lsr.l    #1,d1        ; 10
  267. ; d0 = ..a6..c6..e6..g6 a6b6c6d6e6f6g6h6 b6a4d6c4f6e4h6g4 a4b4c4d4e4f4g4h4
  268. ; d1 = ..a7..c7..e7..g7 a7b7c7d7e7f7g7h7 b7a5d7c5f7e5h7g5 a5b5c5d5e5f5g5h5
  269.  
  270.         move.b    d1,40*256(a5)    ; 12 plane 6
  271.         swap    d1        ;  4
  272.         move.b    d1,40*256(a6)    ; 12 plane 8
  273.         move.b    d0,(a5)+    ;  8 plane 5
  274.         swap    d0        ;  4
  275.         move.b    d0,(a6)+    ;  8 plane 7
  276.  
  277.         Move.l    d2,d1        ;  4
  278.         Lsr.l    #7,d1        ; 22
  279. ; d2 = a3a2c3c2e3e2g3g2 b3b2d3d2f3f2h3h2 a1a0c1c0e1e0g1g0 b1b0d1d0f1f0h1h0 
  280. ; d1 = ..............a3 a2c3c2e3e2g3g2b3 b2d3d2f3f2h3h2a1 a0c1c0e1e0g1g0b1
  281.  
  282.         Move.l    d2,d3        ;  4
  283.         Move.l    d1,d4        ;  4
  284.         And.l    d6,d2        ;  8
  285.         And.l    d6,d1        ;  8
  286.         Eor.l    d2,d3        ;  8
  287.         Eor.l    d1,d4        ;  8
  288. ; d2 = ..a2..c2..e2..g2 ..b2..d2..f2..h2 ..a0..c0..e0..g0 ..b0..d0..f0..h0 
  289. ; d3 = a3..c3..e3..g3.. b3..d3..f3..h3.. a1..c1..e1..g1.. b1..d1..f1..h1.. 
  290. ; d1 = ..............a3 ..c3..e3..g3..b3 ..d3..f3..h3..a1 ..c1..e1..g1..b1
  291. ; d4 = ................ a2..c2..e2..g2.. b2..d2..f2..h2.. a0..c0..e0..g0..        
  292.  
  293.         Or.l    d4,d2        ;  8
  294.         Or.l    d3,d1        ;  8
  295.         Lsr.l    #1,d1        ; 10    ;448
  296. ; d2 = ..a2..c2..e2..g2 a2b2c2d2e2f2g2h2 b2a0d2c0f2e0h2g0 a0b0c0d0e0f0g0h0
  297. ; d1 = ..a3..c3..e3..g3 a3b3c3d3e3f3g3h3 b3a1d3c1f3e1h3g1 a1b1c1d1e1f1g1h1
  298.         move.b    d1,(a3)+    ; 12 plane 2
  299.         swap    d1        ;  4
  300.         move.b    d1,40*256(a4)    ;  8 plane 4
  301.         move.b    d2,(a1)+    ;  8 plane 1
  302.         swap    d2        ;  4
  303.         move.b    d2,(a4)+    ;  8 plane 3 ;126 bytws
  304.         cmpa.l    a1,a2        ;  6    
  305.     bne    .BPPLoop        ; 10
  306.     
  307.     move.w SCRMOD,d0
  308.     add.w d0,a1
  309.     add.w d0,a3
  310.     add.w d0,a4
  311.     add.w d0,a5
  312.     add.w d0,a6
  313.     move.w WTC,d0
  314.     lea 1(a1,d0.w),a2
  315.     add.w MODUL,a0    
  316.     subq.w #1,HTC
  317.     bge .BPPLoop
  318.     
  319.         movem.l    (a7)+,d2-d7/a2-a6
  320.         rts
  321.  
  322.  
  323. *        Length    Cycles    Cyc/pix.
  324. *MainLoop    132     508    63.5 
  325. *Double Main    258     1000    62.5    
  326.  
  327. *Seeing as we will probably be averaging at least 50000 pixels per "frame" any 
  328. *cycle saving is significant
  329.  
  330.  
  331. NEWCHUNKYTEL
  332.         ;a0 = byte pixels , a1 = plane 1
  333.         ;256 colour / 8 bitplane
  334.  
  335.         tst.b d4
  336.         bne DOUBWIDTHCHUNKTEL
  337.  
  338.         move.w d2,MODUL
  339.         move.w d0,WTC
  340.  
  341.         move.w d1,HTC
  342.         move.w d3,SCRMOD
  343.         
  344.         Movem.l    d2-d7/a2-a6,-(a7)
  345.         move.l #SHIMMER,a6
  346.         asl.w #8,d5
  347.         asl.w #2,d5
  348.         add.w d5,a6
  349.         move.l a6,STARTSHIM
  350.         
  351.         Movem.l    .Const(pc),d5-d7
  352.         
  353.         move.l a1,a2
  354.         adda.w WTC,a2
  355.         addq #1,a2        ; end of line to convert
  356.         
  357.         Lea    2*40*256(a1),a3    Plane3 
  358.         Lea    2*40*256(a3),a4    Plane5
  359.         Lea    2*40*256(a4),a5    Plane7
  360.         
  361.         
  362.     Bra.s    .BPPLoop
  363. .Const        Dc.l    $0f0f0f0f,$55555555,$3333cccc
  364.         Cnop    0,4
  365.  
  366.  
  367. .BPPLoop    
  368.         move.w (a6)+,d0
  369.         Move.l    (a0,d0.w),d0    ; 12 get next 4 chunky pixels in d0
  370.         Move.l    d0,d2        ;  4
  371.         move.l (a6)+,d1
  372.         And.l    d5,d2        ;  8 d5=$0f0f0f0f
  373.         Eor.l    d2,d0        ;  8
  374.         Move.l    4(a0,d1.w),d1    ; 12 get next 4 chunky pixels in d1
  375.         addq #8,a0
  376. ; d0 = a7a6a5a4a3a2a1a0 b7b6b5b4b3b2b1b0 c7c6c5c4c3c2c1c0 d7d6d5d4d3d2d1d0
  377. ; d1 = e7e6e5e4e3e2e1e0 f7f6f5f4f3f2f1f0 g7g6g5g4g3g2g1g0 h7h6h5h4h3h2h1h0
  378.  
  379.         Move.l    d1,d3        ;  4
  380.         And.l    d5,d3        ;  8 d5=$0f0f0f0f
  381.         Eor.l    d3,d1        ;  8
  382. ; d0 = a7a6a5a4........ b7b6b5b4........ c7c6c5c4........ d7d6d5d4........
  383. ; d1 = e7e6e5e4........ f7f6f5f4........ g7g6g5g4........ h7h6h5h4........
  384. ; d2 = ........a3a2a1a0 ........b3b2b1b0 ........c3c2c1c0 ........d3d2d1d0
  385. ; d3 = ........e3e2e1e0 ........f3f2f1f0 ........g3g2g1g0 ........h3h2h1h0
  386.  
  387.         Lsl.l    #4,d2        ; 16
  388.         Lsr.l    #4,d1        ; 16
  389.         Or.l    d3,d2        ;  8
  390.         Or.l    d1,d0        ;  8
  391. ; d0 = a7a6a5a4e7e6e5e4 b7b6b5b4f7f6f5f4 c7c6c5c4g7g6g5g4 d7d6d5d4h7h6h5h4
  392. ; d2 = a3a2a1a0e3e2e1e0 b3b2b1b0f3f2f1f0 c3c2c1c0g3g2g1g0 d3d2d1d0h3h2h1h0
  393.  
  394.         Move.l    d0,d1        ;  4
  395.         Move.l    d2,d3        ;  4
  396.         And.l    d7,d1        ;  8    ;128
  397.         And.l    d7,d3        ;  8
  398.         Eor.l    d1,d0        ;  8
  399.         Eor.l    d3,d2        ;  8
  400.         Lsr.w    #2,d1        ; 10    
  401.         Lsr.w    #2,d3        ; 10
  402.         Swap    d1        ;  4
  403.         Swap    d3        ;  4
  404.         Lsl.w    #2,d1        ; 10
  405.         Lsl.w    #2,d3        ; 10
  406. ; d0 = a7a6....e7e6.... b7b6....f7f6.... ....c5c4....g5g4 ....d5d4....h5h4
  407. ; d1 = ....c7c6....g7g6 ....d7d6....h7h6 a5a4....e5e4.... b5b4....f5f4.... 
  408.  
  409.         Or.l    d1,d0        ;  8
  410.         Or.l    d3,d2        ;  8
  411. ; d0 = a7a6c7c6e7e6g7g6 b7b6d7d6f7f6h7h6 a5a4c5c4e5e4g5g4 b5b4d5d4f5f4h5h4 , d2=32/10
  412.  
  413.         Move.l    d0,d1        ;  4
  414.         Lsr.l    #7,d1        ; 22
  415. ; d0 = a7a6c7c6e7e6g7g6 b7b6d7d6f7f6h7h6 a5a4c5c4e5e4g5g4 b5b4d5d4f5f4h5h4 
  416. ; d1 = ..............a7 a6c7c6e7e6g7g6b7 b6d7d6f7f6h7h6a5 a4c5c4e5e4g5g4b5
  417.  
  418.         Move.l    d0,d3        ;  4
  419.         Move.l    d1,d4        ;  4
  420.         And.l    d6,d0        ;  8    ;258
  421.         And.l    d6,d1        ;  8
  422.         Eor.l    d0,d3        ;  8
  423.         Eor.l    d1,d4        ;  8
  424. ; d0 = ..a6..c6..e6..g6 ..b6..d6..f6..h6 ..a4..c4..e4..g4 ..b4..d4..f4..h4 
  425. ; d3 = a7..c7..e7..g7.. b7..d7..f7..h7.. a5..c5..e5..g5.. b5..d5..f5..h5.. 
  426. ; d1 = ..............a7 ..c7..e7..g7..b7 ..d7..f7..h7..a5 ..c5..e5..g5..b5
  427. ; d4 = ................ a6..c6..e6..g6.. b6..d6..f6..h6.. a4..c4..e4..g4..
  428.  
  429.         Or.l    d4,d0        ;  8
  430.         Or.l    d3,d1        ;  8
  431.         Lsr.l    #1,d1        ; 10
  432. ; d0 = ..a6..c6..e6..g6 a6b6c6d6e6f6g6h6 b6a4d6c4f6e4h6g4 a4b4c4d4e4f4g4h4
  433. ; d1 = ..a7..c7..e7..g7 a7b7c7d7e7f7g7h7 b7a5d7c5f7e5h7g5 a5b5c5d5e5f5g5h5
  434.  
  435.         move.b    d1,40*256(a4)    ; 12 plane 6
  436.         swap    d1        ;  4
  437.         move.b    d1,40*256(a5)    ; 12 plane 8
  438.         move.b    d0,(a4)+    ;  8 plane 5
  439.         swap    d0        ;  4
  440.         move.b    d0,(a5)+    ;  8 plane 7
  441.  
  442.         Move.l    d2,d1        ;  4
  443.         Lsr.l    #7,d1        ; 22
  444. ; d2 = a3a2c3c2e3e2g3g2 b3b2d3d2f3f2h3h2 a1a0c1c0e1e0g1g0 b1b0d1d0f1f0h1h0 
  445. ; d1 = ..............a3 a2c3c2e3e2g3g2b3 b2d3d2f3f2h3h2a1 a0c1c0e1e0g1g0b1
  446.  
  447.         Move.l    d2,d3        ;  4
  448.         Move.l    d1,d4        ;  4
  449.         And.l    d6,d2        ;  8
  450.         And.l    d6,d1        ;  8
  451.         Eor.l    d2,d3        ;  8
  452.         Eor.l    d1,d4        ;  8
  453. ; d2 = ..a2..c2..e2..g2 ..b2..d2..f2..h2 ..a0..c0..e0..g0 ..b0..d0..f0..h0 
  454. ; d3 = a3..c3..e3..g3.. b3..d3..f3..h3.. a1..c1..e1..g1.. b1..d1..f1..h1.. 
  455. ; d1 = ..............a3 ..c3..e3..g3..b3 ..d3..f3..h3..a1 ..c1..e1..g1..b1
  456. ; d4 = ................ a2..c2..e2..g2.. b2..d2..f2..h2.. a0..c0..e0..g0..        
  457.  
  458.         Or.l    d4,d2        ;  8
  459.         Or.l    d3,d1        ;  8
  460.         Lsr.l    #1,d1        ; 10    ;448
  461. ; d2 = ..a2..c2..e2..g2 a2b2c2d2e2f2g2h2 b2a0d2c0f2e0h2g0 a0b0c0d0e0f0g0h0
  462. ; d1 = ..a3..c3..e3..g3 a3b3c3d3e3f3g3h3 b3a1d3c1f3e1h3g1 a1b1c1d1e1f1g1h1
  463.         move.b    d1,40*256(a1)    ; 12 plane 2
  464.         swap    d1        ;  4
  465.         move.b    d1,40*256(a3)    ;  8 plane 4
  466.         move.b    d2,(a1)+    ;  8 plane 1
  467.         swap    d2        ;  4
  468.         move.b    d2,(a3)+    ;  8 plane 3 ;126 bytws
  469.         cmpa.l    a1,a2        ;  6    
  470.     bne    .BPPLoop        ; 10
  471.     
  472.     move.l a6,d0
  473.     sub.l STARTSHIM,d0
  474.     and.l #255*2,d0
  475.     add.l STARTSHIM,d0
  476.     move.l d0,a6
  477.     
  478.     move.w SCRMOD,d0
  479.     add.w d0,a1
  480.     add.w d0,a3
  481.     add.w d0,a4
  482.     add.w d0,a5
  483.     move.w WTC,d0
  484.     lea 1(a1,d0.w),a2
  485.     add.w MODUL,a0    
  486.     subq.w #1,HTC
  487.     bge .BPPLoop
  488.     
  489.         movem.l    (a7)+,d2-d7/a2-a6
  490.         rts
  491.  
  492. DOUBWIDTHCHUNKTEL:
  493.         move.w d2,MODUL
  494.         move.w d0,WTC
  495.  
  496.         move.w d1,HTC
  497.         move.w d3,SCRMOD
  498.         
  499.         Movem.l    d2-d7/a2-a6,-(a7)
  500.         Movem.l    .Const(pc),d5-d7
  501.         
  502.         move.l a1,a2
  503.         adda.w WTC,a2
  504.         addq #1,a2        ; end of line to convert
  505.         
  506.         Lea    40*256(a1),a3            Plane2 
  507.         Lea    2*40*256(a1),a4            Plane3
  508.         Lea    2*40*256(a4),a5            Plane5
  509.         Lea    2*40*256(a5),a6            Plane7
  510.     Bra.s    .BPPLoop
  511. .Const        Dc.l    $0f0f0f0f,$55555555,$3333cccc
  512.         Cnop    0,4
  513.  
  514.  
  515. .BPPLoop    Move.l    (a0)+,d0    ; 12 get next 4 chunky pixels in d0
  516.  
  517.         and.l #$ff00ff00,d0
  518.         move.l d0,d2
  519.         lsr.l #8,d2
  520.         or.l d2,d0
  521.  
  522.         Move.l    d0,d2        ;  4
  523.         And.l    d5,d2        ;  8 d5=$0f0f0f0f
  524.         Eor.l    d2,d0        ;  8
  525.         Move.l    (a0)+,d1    ; 12 get next 4 chunky pixels in d1
  526.         and.l #$ff00ff00,d1
  527.         move.l d1,d3
  528.         lsr.l #8,d3
  529.         or.l d3,d1
  530. ; d0 = a7a6a5a4a3a2a1a0 b7b6b5b4b3b2b1b0 c7c6c5c4c3c2c1c0 d7d6d5d4d3d2d1d0
  531. ; d1 = e7e6e5e4e3e2e1e0 f7f6f5f4f3f2f1f0 g7g6g5g4g3g2g1g0 h7h6h5h4h3h2h1h0
  532.  
  533.         Move.l    d1,d3        ;  4
  534.         And.l    d5,d3        ;  8 d5=$0f0f0f0f
  535.         Eor.l    d3,d1        ;  8
  536. ; d0 = a7a6a5a4........ b7b6b5b4........ c7c6c5c4........ d7d6d5d4........
  537. ; d1 = e7e6e5e4........ f7f6f5f4........ g7g6g5g4........ h7h6h5h4........
  538. ; d2 = ........a3a2a1a0 ........b3b2b1b0 ........c3c2c1c0 ........d3d2d1d0
  539. ; d3 = ........e3e2e1e0 ........f3f2f1f0 ........g3g2g1g0 ........h3h2h1h0
  540.  
  541.         Lsl.l    #4,d2        ; 16
  542.         Lsr.l    #4,d1        ; 16
  543.         Or.l    d3,d2        ;  8
  544.         Or.l    d1,d0        ;  8
  545. ; d0 = a7a6a5a4e7e6e5e4 b7b6b5b4f7f6f5f4 c7c6c5c4g7g6g5g4 d7d6d5d4h7h6h5h4
  546. ; d2 = a3a2a1a0e3e2e1e0 b3b2b1b0f3f2f1f0 c3c2c1c0g3g2g1g0 d3d2d1d0h3h2h1h0
  547.  
  548.         Move.l    d0,d1        ;  4
  549.         Move.l    d2,d3        ;  4
  550.         And.l    d7,d1        ;  8    ;128
  551.         And.l    d7,d3        ;  8
  552.         Eor.l    d1,d0        ;  8
  553.         Eor.l    d3,d2        ;  8
  554.         Lsr.w    #2,d1        ; 10    
  555.         Lsr.w    #2,d3        ; 10
  556.         Swap    d1        ;  4
  557.         Swap    d3        ;  4
  558.         Lsl.w    #2,d1        ; 10
  559.         Lsl.w    #2,d3        ; 10
  560. ; d0 = a7a6....e7e6.... b7b6....f7f6.... ....c5c4....g5g4 ....d5d4....h5h4
  561. ; d1 = ....c7c6....g7g6 ....d7d6....h7h6 a5a4....e5e4.... b5b4....f5f4.... 
  562.  
  563.         Or.l    d1,d0        ;  8
  564.         Or.l    d3,d2        ;  8
  565. ; d0 = a7a6c7c6e7e6g7g6 b7b6d7d6f7f6h7h6 a5a4c5c4e5e4g5g4 b5b4d5d4f5f4h5h4 , d2=32/10
  566.  
  567.         Move.l    d0,d1        ;  4
  568.         Lsr.l    #7,d1        ; 22
  569. ; d0 = a7a6c7c6e7e6g7g6 b7b6d7d6f7f6h7h6 a5a4c5c4e5e4g5g4 b5b4d5d4f5f4h5h4 
  570. ; d1 = ..............a7 a6c7c6e7e6g7g6b7 b6d7d6f7f6h7h6a5 a4c5c4e5e4g5g4b5
  571.  
  572.         Move.l    d0,d3        ;  4
  573.         Move.l    d1,d4        ;  4
  574.         And.l    d6,d0        ;  8    ;258
  575.         And.l    d6,d1        ;  8
  576.         Eor.l    d0,d3        ;  8
  577.         Eor.l    d1,d4        ;  8
  578. ; d0 = ..a6..c6..e6..g6 ..b6..d6..f6..h6 ..a4..c4..e4..g4 ..b4..d4..f4..h4 
  579. ; d3 = a7..c7..e7..g7.. b7..d7..f7..h7.. a5..c5..e5..g5.. b5..d5..f5..h5.. 
  580. ; d1 = ..............a7 ..c7..e7..g7..b7 ..d7..f7..h7..a5 ..c5..e5..g5..b5
  581. ; d4 = ................ a6..c6..e6..g6.. b6..d6..f6..h6.. a4..c4..e4..g4..
  582.  
  583.         Or.l    d4,d0        ;  8
  584.         Or.l    d3,d1        ;  8
  585.         Lsr.l    #1,d1        ; 10
  586. ; d0 = ..a6..c6..e6..g6 a6b6c6d6e6f6g6h6 b6a4d6c4f6e4h6g4 a4b4c4d4e4f4g4h4
  587. ; d1 = ..a7..c7..e7..g7 a7b7c7d7e7f7g7h7 b7a5d7c5f7e5h7g5 a5b5c5d5e5f5g5h5
  588.  
  589.         move.b    d1,40*256(a5)    ; 12 plane 6
  590.         swap    d1        ;  4
  591.         move.b    d1,40*256(a6)    ; 12 plane 8
  592.         move.b    d0,(a5)+    ;  8 plane 5
  593.         swap    d0        ;  4
  594.         move.b    d0,(a6)+    ;  8 plane 7
  595.  
  596.         Move.l    d2,d1        ;  4
  597.         Lsr.l    #7,d1        ; 22
  598. ; d2 = a3a2c3c2e3e2g3g2 b3b2d3d2f3f2h3h2 a1a0c1c0e1e0g1g0 b1b0d1d0f1f0h1h0 
  599. ; d1 = ..............a3 a2c3c2e3e2g3g2b3 b2d3d2f3f2h3h2a1 a0c1c0e1e0g1g0b1
  600.  
  601.         Move.l    d2,d3        ;  4
  602.         Move.l    d1,d4        ;  4
  603.         And.l    d6,d2        ;  8
  604.         And.l    d6,d1        ;  8
  605.         Eor.l    d2,d3        ;  8
  606.         Eor.l    d1,d4        ;  8
  607. ; d2 = ..a2..c2..e2..g2 ..b2..d2..f2..h2 ..a0..c0..e0..g0 ..b0..d0..f0..h0 
  608. ; d3 = a3..c3..e3..g3.. b3..d3..f3..h3.. a1..c1..e1..g1.. b1..d1..f1..h1.. 
  609. ; d1 = ..............a3 ..c3..e3..g3..b3 ..d3..f3..h3..a1 ..c1..e1..g1..b1
  610. ; d4 = ................ a2..c2..e2..g2.. b2..d2..f2..h2.. a0..c0..e0..g0..        
  611.  
  612.         Or.l    d4,d2        ;  8
  613.         Or.l    d3,d1        ;  8
  614.         Lsr.l    #1,d1        ; 10    ;448
  615. ; d2 = ..a2..c2..e2..g2 a2b2c2d2e2f2g2h2 b2a0d2c0f2e0h2g0 a0b0c0d0e0f0g0h0
  616. ; d1 = ..a3..c3..e3..g3 a3b3c3d3e3f3g3h3 b3a1d3c1f3e1h3g1 a1b1c1d1e1f1g1h1
  617.         move.b    d1,(a3)+    ; 12 plane 2
  618.         swap    d1        ;  4
  619.         move.b    d1,40*256(a4)    ;  8 plane 4
  620.         move.b    d2,(a1)+    ;  8 plane 1
  621.         swap    d2        ;  4
  622.         move.b    d2,(a4)+    ;  8 plane 3 ;126 bytws
  623.         cmpa.l    a1,a2        ;  6    
  624.     bne    .BPPLoop        ; 10
  625.     
  626.     move.w SCRMOD,d0
  627.     add.w d0,a1
  628.     add.w d0,a3
  629.     add.w d0,a4
  630.     add.w d0,a5
  631.     add.w d0,a6
  632.     move.w WTC,d0
  633.     lea 1(a1,d0.w),a2
  634.     add.w MODUL,a0    
  635.     subq.w #1,HTC
  636.     bge .BPPLoop
  637.     
  638.         movem.l    (a7)+,d2-d7/a2-a6
  639.         rts
  640.  
  641. STARTSHIM: dc.l 0
  642. SHIMMER: incbin "ab3:includes/shimmerfile"
  643.